package com.itheima.homework;

import java.util.Random;
import java.util.Scanner;

/**
 * 模拟双色球-判断中奖情况
 * 第一步 用户投注一组号码
 * 第二步 随机一组中奖号码出来
 * 第三步 判断用户是否中奖
 */
public class Homework08 {
    public static void main(String[] args) {
//        //用户投注的号码
//        int[] userNumbers = userNumbers();
//        //中奖的号码
//        int[] luckyNumbers = luckyNumbers();
////        比较这两个号码 并判断中奖情况
//        judge(userNumbers, luckyNumbers);
        // 目标：完成双色球系统的开发。
        //用户投注
        int[] userNumbers = userNumbers();
        System.out.println("您投注的号码：");
        printArray(userNumbers);

        //随机产生一个中奖号码
        int[] luckNumbers = luckyNumbers();
        System.out.println("中奖的号码：");
        printArray(luckNumbers);

        //判断用户投注的号码是否中奖
        judge(userNumbers, luckNumbers);

    }
    /* 用于让用户投注一组号码（前6个是红球，最后1个是蓝球），返回用户投注的号码*/
    public static int[] userNumbers(){
        //要求：6个红球的范围是1-33 且不能重复 蓝球的号码范围1-16
        //初始化一个数组 存取6个红球 1个蓝球
        int[] userNumbers = new int[7];
//遍历数组 让用户依次输入中奖的号码
        for(int i = 0; i < userNumbers.length - 1; i++){
           while(true){
               Scanner sc = new Scanner(System.in);
               System.out.print("请输入第 " + (i+1) + "个红球号码（1-33且不能重复）");
               int number = sc.nextInt();
               //判断number是否在1-33里面 判断这个号码是否重复 不重复才可以使用
               if(number < 1 || number > 33){
                   System.out.println("对不起，您输入的红球号码不在1-33之间，请确认！");
               }else{
                   //红球号码在1-33之间 判断是否重复
                   if(exist(userNumbers,number)){
                       System.out.println("对不起，您当前输入的这个红球号码前面选择过，重复了，请确认");
                   }else{
                       //number记住的这个号码没有重复的 可以正常使用
                       userNumbers[i] = number;
                       break;//跳出死循环
                   }
               }
           }
        }
        //投注最后一个蓝球号码
        while (true) {
            System.out.println("请您输入最后1个蓝球号码（1-16）：");
            Scanner sc = new Scanner(System.in);
            int number = sc.nextInt();
            if(number < 1 || number > 16){
                System.out.println("对不起，您输入的蓝球号码范围不对！");
            }else {
                userNumbers[6] = number;
                break; // 蓝球号码录入成功，结束死循环
            }
        }
        return userNumbers;
    }
    /*系统随机一组中奖号码（前6个是红球，最后1个是蓝球），返回中奖号码*/
    public static int[] luckyNumbers(){
        //创建一个整型数组 存储这7个中奖号码
        int[] luckyNumbers = new int[7];
        Random random = new Random();
        //遍历前6个位置，依次随机一个红球号码存入（1-33）不重复
        for(int i = 0; i < luckyNumbers.length - 1; i++){
           //  i = 0 1 2 3 4 5
            while(true){
               int number = random.nextInt(33) + 1;
               //判断这个号码是否出现过（重复）
                if(!exist(luckyNumbers,number)){
                    //number不重复
                    luckyNumbers[i] = number;
                    break;
                }
            }
        }
        // 3、录入一个蓝球号码。 1-16
        luckyNumbers[6] = random.nextInt(16) + 1;
        return luckyNumbers;
    }
    /*传入两组号码，用来判断用户投注号码的中奖情况，并输出*/
    public static void judge(int[] userNumbers, int[] luckyNumbers){
    /*
    1)定义两个变量redCount和blueCount用来记录，红球的个数和蓝球的个数
	2)遍历两个数组中前6个元素(红球)，判断两个数组中有没有相同元素
		如果找到一个相同元素，则redCount++
    3)比较两个数组中最后一个元素(蓝球)是否相同
    	如果相同，则blueCount++
	4)根据红球和蓝球的命中个数，打印输出对应的奖项
     */
        int redCount = 0;
        int blueCount = 0;
        for(int i = 0; i < userNumbers.length - 1; i++){
            for(int j = 0; j < luckyNumbers.length - 1; j++){
                if(userNumbers[i] == luckyNumbers[j]){
                    redCount++;
                    break;
                }
            }
        }
        // 3、判断蓝球是否命中了
        blueCount = userNumbers[6] == luckyNumbers[6] ? 1 : 0;

        System.out.println("您命中的红球数量是：" + redCount);
        System.out.println("您命中的蓝球数量是：" + blueCount);
        // 4、判断中奖详情，并输出结果
        if(redCount == 6 && blueCount == 1){
            System.out.println("恭喜您，中奖1000万，可以开始享受人生了~~~");
        }else if(redCount == 6 && blueCount == 0){
            System.out.println("恭喜您，中奖500万，可以稍微开始享受人生了~~~");
        }else if(redCount == 5 && blueCount == 1){
            System.out.println("恭喜您，中奖3000元，可以出去吃顿小龙虾了~");
        }else if(redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1){
            System.out.println("恭喜您，中了小奖：200元~");
        }else if(redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1){
            System.out.println("中了10元~");
        }else if( redCount < 3 && blueCount == 1){
            System.out.println("中了5元~");
        }else {
            System.out.println("感谢您对福利事业做出的巨大贡献~~~");
        }

    }

    private static boolean exist(int[] numbers, int number) {
        // 需求：判断number这个数字是否在numbers数组中存在。
        // numbers = [12, 25, 18, 0, 0, 0, 0]
        // number = 12
        for (int i = 0; i < numbers.length; i++) {
            if(numbers[i] == 0){
                break;
            }
            if(numbers[i] == number){
                return true;
            }
        }
        return false;
    }
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
        }
        System.out.println("]");
    }
}
